/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pl.cezary.butler.walili.server.db.tasks;

import pl.cezary.butler.walili.common.User;
import pl.cezary.butler.walili.server.db.utils.StorageBD;
import pl.cezary.butler.walili.server.Server;
import pl.cezary.butler.walili.server.db.Database;

/**
 *  <p style="margin-top: 0">
 *    Obiekt niewidoczny w procesach klienta, powinien byc uzywany do 
 *    identyfikacji uzytkownika wszedzie poza procesem logowania
 *    Powinna wystepowac zaleznosc 
 *    <code>
 *      UserId id1,id2;
 *      User   user1,user2;
 *      ...
 *      id1 == id2 wtw. user1 == user2
 *    </code>
 *      </p>
 */
// <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
// #[regen=yes,id=DCE.F655F8B7-3040-3D2F-28D0-65F7B11E7AE1]
// </editor-fold> 
public class UserIdImpl extends IUserId {

    static final long serialVersionUID = -2769522470250512298L;        
    
    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.305E48E3-4968-DC84-087E-A2BAA3352854]
    // </editor-fold> 
    private int id;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.D8672E38-1525-AE9B-98D6-C0A902B5B89A]
    // </editor-fold> 
    private UserIdImpl() {
    }

    public UserIdImpl(int id){
        this.id=id;
    }
    
    /**
     * Konstruktor generujacy obiekt UserId na podstawie obiektu User
     * <i>musi uzywac bd</i>
     * @param user obiekt do zmapowania.
     */
    public UserIdImpl(User user) {
        final Database baza = StorageBD.getBD(Server.MAIN_DB);
        GetIntUserIdTask zad=new GetIntUserIdTask(user);
        baza.executeDbTask(zad);
        Integer id_Int=zad.getResults();
        if(id_Int!=null){
            this.id = id_Int;
        }
        else throw new IllegalArgumentException("Niepoprawny login oraz/lub haslo");

    }
    
    public static UserIdImpl getUserID(User user){
        final Database baza = StorageBD.getBD(Server.MAIN_DB);
        GetIntUserIdTask zad=new GetIntUserIdTask(user);
        baza.executeDbTask(zad);
        Integer idInt=zad.getResults();
        return (idInt != null) ? new UserIdImpl(idInt):null;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.EFE0FB90-5827-85B2-8E1E-12DCDC8457D1]
    // </editor-fold> 
    /**
     * Metoda pozwalajaca na pobranie id z obiektu
     * @return
     */
    public int getId() {
        return id;
    }

    /**
     * Metoda pozwalajaca na ustawienie id w obiekcie
     * @param id nowe id
     */
    private void setId(int id) {
        this.id = id;
    }     
}

